/*global pi */


/* 平面，方程是：v.x * x + v.y * y + v.z * z + d = 0 */

pi.mod.define('pi.math.plane', function (pi) {
	"use strict";
	var module = {};

	/**
	 * 构造一个平面
	 * v: pi.math.vec3, 法向量
	 * d: 原点到平面的距离
	 */
	module.create = function (v, d) {
		return {
			distance: d,
			normal: pi.math.vec3.copy(v)
		};
	};

	/* 平面的单位化 */
	module.normalize = function (dst, src) {
		var d = pi.math.vec3.length(src.normal);

		dst.normal = {};
		pi.math.vec3.normalize(dst.normal, src.normal);

		dst.distance = d;
		if (dst.distance >= Number.MIN_VALUE) {
			dst.distance = src.distance / dst.distance;
		}
	};

	/**
	 * 平面和点的点积
	 * point：pi.math.vec3
	 *	小于0表示点在平面的背面
	 *	等于0表示点在平面上
	 *	大于0表示点在平面正面
	 */
	module.dot = function (plane, point) {
		return plane.distance + pi.math.vec3.dot(point, plane.normal);
	};

	return module;
});